草庐IT

NIO 缓冲区

全部标签

windows - 为什么在使用 OS 和磁盘缓冲区写入文件后读取操作要快得多?

我正在使用CreateFile()和WriteFile()依次将大约100个大小为50MB的文件写入磁盘上的一个目录。在第二步中,使用CreateFile()和ReadFile()读取这些文件的内容。我注意到一些部分奇怪的事情:如果我通过FILE_FLAG_NO_BUFFERING|FILE_FLAG_WRITE_THROUGH写入文件时,读取需要很长时间(通常为数百毫秒)。但是,当我不传递这些标志时(而是使用FlushFileBuffers()),写入似乎以大致相同的速度发生,但写入后读取这些文件的速度非常快(每次少于20毫秒)文件!)。这怎么可能?写入5000MB数据时传递的标志如

c - ReadProcessMemory 返回一个更大的缓冲区(C,windows)

我正在尝试使用以下代码读取进程内存:voidreaddata(HANDLEphandle,LPCVOIDpaddress,SIZE_Tdatasize){char*buff;SIZE_Tdataread;BOOLb=FALSE;buff=(char*)malloc(datasize);b=ReadProcessMemory(phandle,paddress,(LPVOID)buff,datasize,&dataread);if(!b){printf("errorreadingmemory,err=%d\n",GetLastError());return;}printf("DataRea

windows - 套接字应用程序最佳实践的缓冲区管理

拥有WindowsIOCP应用程序......................我了解对于异步i/o操作(在网络上),缓冲区必须在发送/读取操作期间保持有效。因此对于每个连接,我都有一个用于读取的缓冲区。对于发送,我使用缓冲区将要发送的数据复制到其中。发送操作完成后,我释放缓冲区以便可以重复使用。到目前为止还不错,不是什么大问题。尚不清楚的是你们是怎么做到的?另一件事是,即使以这种方式处理,我的意思是多缓冲区,接收端也可能会被数据淹没(根据经验)。即使将SO_RCVBUF设置为25MB也对我的测试没有帮助。所以我该怎么做?有待发送队列吗? 最佳答案

windows - Emacs 在进程缓冲区中显示 ^M

目前,我有一个进程缓冲区,它是utf-8-auto(emacsmodeline将缓冲区报告为utf-8-auto-dos)CRLF风格的换行符。当我通过process-send-region或process-send-string将多行文本写入缓冲区时,每行都以^M为后缀>.让这个问题变得奇怪的是,直接从进程写入进程缓冲区的文本不包含^M。源文本来自哪里似乎没有任何区别,事实上,即使是标记和发送的多行区域已经出现在进程缓冲区中(不包含^M)将在发送时包含它们。(注意process-send-region的源文本将始终来自Emacs缓冲区,process-send-string,当多行将

c++ - 将视频文件加载到 C++ 中的缓冲区中

我目前正在尝试创建一个程序来获取视频文件(通常是AVI),并尝试将其转换为图像。到目前为止,我的流程运行得非常完美,如果需要的话可以不用管它。但是,我想看看是否可以优化它以提高速度。所以我的问题是,是否可以将视频文件的一部分逐block加载到内存中,而不是流式传输。也许将2-3分钟的剪辑加载到缓冲区中,对其进行处理,然后在接下来的2-3分钟的视频中重新使用它。我研究了DirectShow和OpenCV以加载和播放视频文件,但到目前为止还没有找到任何关于将视频加载到缓冲区中的信息。非常感谢任何指向教程或概念的链接。如果有帮助,将在WindowsXP/7机器上开发。

c++ - 关于 Windows 上 OpenGL 中多重缓冲的几个问题

我看过this但它没有提及三重缓冲和实际方法。现代游戏执行三重缓冲的最常见方式是什么?SwapBuffers是什么意思?就OpenGL状态而言究竟如何?是否可以独立于窗口系统执行双缓冲和三缓冲(例如,通过使用glDrawBuffer进行操作或使用FBO/PBO)?3.在性能和灵active方面是否有意义? 最佳答案 根据OpenGLcommonmistakesontriplebuffering:Youcannotcontrolwhetheradriverdoestriplebuffering.Youcouldtrytoimpleme

c++ - 使用winsock发送缓冲区后是否可以删除内存?

我有一个程序需要将缓冲区发送到套接字。我的问题是我可以在调用Winsock->send()方法后立即删除缓冲区吗?我提出这个问题的原因:我使用Windbg工具来识别内存泄漏,它在BuildPacket()中显示了这个地方,新内存没有正确释放。所以我想到发送到套接字后清除内存。当我的程序在多个循环中运行时,此方法将被调用大约4,00,000次,这会消耗大部分内存。请。假设m_ClientSocket是一个已经建立的套接字连接。boolTCPSendBuffer(char*pMessage,intiMessageSize){try{intiResult=0;iResult=send(m_C

windows - 如何获取 NtQueryInformationProcess 所需的缓冲区大小?

NtQueryInformationProcess的ReturnLength参数说明如下:ReturnLengthApointertoavariableinwhichthefunctionreturnsthesizeoftherequestedinformation.Ifthefunctionwassuccessful,thisisthesizeoftheinformationwrittentothebufferpointedtobytheProcessInformationparameter,butifthebufferwastoosmall,thisistheminimumsize

Java nio 监视服务 : Watch Windows drives list

我想在连接USB驱动器时收到通知。所以java说:“驱动器H:已创建”。有没有办法用WatchService做到这一点?看根目录是行不通的。它只监视当前驱动器的根目录:Paths.get("/").register 最佳答案 您不能使用WatchService来做到这一点。由于您只担心Windows,您可以简单地轮询FileSystem.getRootDirectories并检测变化。try{Listroots=asList(FileSystems.getDefault().getRootDirectories());for(;;)

c++ - 在 AMD CCC 中启用 OpenGL 三重缓冲 + vsync 会破坏我们的应用程序

我们有一个用C++编写的桌面Windows应用程序,它使用OpenGL渲染View。在某些AMD卡上,如果您打开CatalystControlCenter并强制启用三重缓冲和垂直同步,它会破坏我们的应用程序:根本没有任何渲染,它只是一个灰色屏幕(在其他一些驱动程序版本上,它会在创建时崩溃而不是上下文)。关闭三重缓冲或V-sync将其恢复正常。我们使用wglSwapIntervalEXT在我们的应用程序中启用垂直同步。认为它可能会冲突,我删除了它的代码;没有变化。这绝对是一个驱动程序错误,还是我们必须做一些不同的事情来处理三重缓冲? 最佳答案